'use strict';
// 导入发送邮件的依赖模块
const nodemailer = require('nodemailer');
// 谁发送邮件
const FROM_EMAIL = "1217245503@qq.com";
// 配置发送类型
const transporter = nodemailer.createTransport({
	host: "smtp.qq.com", //邮箱服务器  这里我用的qq邮箱 smtp.qq.com   smtp.163.com
	port: 465, //邮箱使用端口
	secure: true, //是否使用默认的465端口
	auth: {
		user: FROM_EMAIL,
		pass: "nevdolyssraqhigg" //必须是使用自己的QQ授权码
	}
});
// 编写发送邮件的方法
function sendMail(option) {
	return new Promise((resolve, reject) => {
		nodemailer.createTestAccount((err) => {
			if (err) return reject("创建失败");
			transporter.sendMail(option, (error) => {
				// console.log("失败的原因:",error);
				if (error) return reject("发送失败");
				resolve({
					code: 200,
					msg: "发送成功"
				});
			});
		})
	})
}
// 编写方法  生成随机4位字符  
const getRandomCode = () => Math.random().toString().slice(-4);
// 获取集合的引用
const db = uniCloud.database();
// 获取 `tt_captchas` 集合的引用
const captchasCollection = db.collection('tt_captchas');

// 处理发送邮件的功能
exports.main = async (event, context) => {
	// 给谁发送邮件(用户邮箱)
	const TO_EMAIL = event.email;
	// 判断前端是否提交参数（邮箱是否有值）
	if (TO_EMAIL) {
		// 获取时间戳
		const createAt = new Date().getTime();
		// 验证码
		const email_code = getRandomCode();

		// 再次判断邮箱和验证码是否已经存在
		// 添加验证码和邮箱到云数据库
		await captchasCollection.add({
				email: TO_EMAIL,
				codeNum: email_code,
				createAt: createAt
			})
			.then(
				res => {
					console.log("添加结果:", res)
				}
			)
			.catch(
				err => {
					console.log("添加失败:", err)
				}
			)


		// 以下发送邮件的信息
		const email = {
			title: `刷题与考试App`,
			body: `
		      <h1>您好：</h1>
		      <p style="font-size: 18px;color:#000;">
		       您的验证码为：
		      <span style="font-size: 16px;color:#f00;"><b>${email_code}</b>,</span>
		      <p>您当前正在《刷题与考试App》，验证码告知他人将会导致数据信息被盗，请勿泄露!</p>
		      </p>
		      <p style="font-size: 1.5rem;color:#999;">60秒内有效</p>
		      `
		}

		let option = {
			from: FROM_EMAIL, // 发件人地址
			to: TO_EMAIL, // 收件人地址，多个收件人可以使用逗号分隔
			subject: email.title, // 邮件标题
			html: email.body // 邮件内容
		}
		// 执行发送邮件的方法
		return await sendMail(option);

	} else {
		// 没有参数
		return await {
			code: 0,
			msg: "缺少参数"
		}
	}
};